/*
 * run_config_plot.h
 *
 *  Created on: 20.07.2013
 *      Author: SpirTanol
 */

#ifndef RUN_CONFIG_PLOT_H_
#define RUN_CONFIG_PLOT_H_

// QT
#include <QObject>

// Qwt
#include <qwt_plot.h>

class QwtPlotCurve;

class QThread;

class Protection;
class ConfigPacket;

class RunConfigPlot;

/** Костыль. Генерирует точки для графика. Нужен что бы программка не подвисала на несколько секунд. */
class Worker : public QObject
{
	Q_OBJECT

	RunConfigPlot *oPlot;

public:
	Worker(RunConfigPlot *plot) : oPlot(plot) {}
	~Worker() {}

public slots:
	void buildGraph();
};

class RunConfigPlot : public QwtPlot
{
	Q_OBJECT

	static const double scCurrent[];

	static const double scCurNomTime[2];
	double oCurNom[2];

	QVector<double> oCurrent;
	QVector<double> oCurrentDuration;

	QwtPlotCurve *oRunConfigCurve;
	QwtPlotCurve *oProtectCurve;
	QwtPlotCurve *oNomCurrentCurve;

	Protection *oProtection;
	int oCurScale;

	QThread *oThread;

	double oNomCurrent;

public:
	RunConfigPlot();
	RunConfigPlot(const RunConfigPlot* plot);
	~RunConfigPlot();
	void setLogBottomScale(bool enable);

	void updateRunConfigData(const QVector<double> &currentDuration, double nomCurrent);
	void updateConfigs(const ConfigPacket *config);

	inline void setCurScale(int curScale) { oCurScale = curScale; }

	void buildProtectionGraph(bool inThread = true);

private:
	void init();

private slots:
	void onBuildProtectionGraphFinished(QVector<double>, QVector<double>);

signals:
	void buildProtectionGraphFinished();

	friend class Worker;

};

#endif /* RUN_CONFIG_PLOT_H_ */
